package subject.tu;

import java.util.ArrayList;
import java.util.List;

public class canFinish {
    public static void main(String[] args) {
        List<List<Integer>> edges;  // 邻接表存储图结构
        int[] visited;              // 节点状态：0=未访问, 1=访问中, 2=已访问
        boolean valid = true;       // 全局标志：是否存在


    }

//    public boolean canFinish(int numCourses, int[][] prerequisites) {
//        // 初始化邻接表 (共 numCourses 个节点)
//        edges = new ArrayList<>();
//        for (int i = 0; i < numCourses; ++i) {
//            edges.add(new ArrayList<>());
//        }
//
//        // 构建图：添加有向边 [b → a]
//        for (int[] info : prerequisites) {
//            edges.get(info[1]).add(info[0]);  // info[1]是先修课，info[0]是后续课
//        }
//
//        visited = new int[numCourses];  // 初始化状态数组
//
//        // 遍历所有未访问节点进行DFS
//        for (int i = 0; i < numCourses && valid; ++i) {
//            if (visited[i] == 0) {
//                dfs(i);
//            }
//        }
//        return valid;  // 无环返回true，有环返回false
//    }
//
//    public void dfs(int u) {
//        visited[u] = 1;  // 标记当前节点为"访问中"
//
//        // 遍历当前节点的所有邻居
//        for (int v : edges.get(u)) {
//            if (visited[v] == 0) {       // 遇到未访问节点：递归DFS
//                dfs(v);
//                if (!valid) return;      // 发现环提前退出
//            } else if (visited[v] == 1) { // 遇到访问中节点 → 发现环！
//                valid = false;
//                return;
//            }
//            // 已访问节点(状态2)直接跳过
//        }
//
//        visited[u] = 2;  // 完成访问：标记为"已访问"
//    }
}
